﻿==============================================================================
DOSYA ADI  : XGuard.cpp
KAYNAK      : -GameServer\XGuard.cpp
SISTEM      : v2369 Reconnect - SUNUCU
BOYUT       : 77204 bayt / 2694 satir
ACIKLAMA    : WIZ_RECONNECT alt-opcode dispatch (XSafe gelen paket dagitimi)
ESLESME     : 12 satir / 1 blok
==============================================================================

NOT: Bu dosya yalnizca RECONNECT ile ilgili kod bloklarini icerir.
     Satir numaralari KAYNAK dosyadaki orijinal satirlardir.

----------------------------------------------------------------------
>> KAYNAK SATIR 1735 - 1855
----------------------------------------------------------------------
  1735 | 	}
  1736 | 
  1737 | }
  1738 | 
  1739 | void CUser::XSafe_Main()
  1740 | {
  1741 | 	if (!isInGame() || IsOffCharacter()) return;
  1742 | 
  1743 | 	if (UNIXTIME - XSafe_LASTCHECK > XSafe_ALIVE_TIMEOUT)
  1744 | 	{
  1745 | 		if (XSafe_ACTIVE == 1)
  1746 | 		{
  1747 | 			//g_pMain->SendHelpDescription(this, "Couldn't connect to ACS server.");
  1748 | 			//Disconnect();
  1749 | 		}
  1750 | 	}
  1751 | }
  1752 | 
  1753 | void CUser::XSafe_HandlePacket(Packet& pkt)
  1754 | {
  1755 | 	uint8 SubOpCode;
  1756 | 	pkt >> SubOpCode;
  1757 | 
  1758 | 	switch (SubOpCode)
  1759 | 	{
  1760 | 	case WIZ_RECONNECT:
  1761 | 	{
  1762 | 		// Paket alt tipini, ana paketin okuma imlecini bozmadan oku.
  1763 | 		uint8 requestType = 0;
  1764 | 		{
  1765 | 			Packet probe = pkt;
  1766 | 			probe >> requestType;
  1767 | 		}
  1768 | 
  1769 | 		if (requestType == RECONNECT_REQ_CONFIRM || requestType == RECONNECT_REQ_CONFIRM_WITH_ID)
  1770 | 		{
  1771 | 			// UI panelinden gelen "Yes" onayı: kimlik/oturum doğrulaması yapılır
  1772 | 			// ve karakter SUSPENDED durumundan IN_GAME durumuna döndürülür.
  1773 | 			HandleReconnectConfirm(pkt, requestType);
  1774 | 			break;
  1775 | 		}
  1776 | 
  1777 | 		// Diğer alt tipler: token/resume/transport/ack akışı.
  1778 | 		HandleReconnectResume(pkt);
  1779 | 		break;
  1780 | 	}
  1781 | 	case XSafeOpCodes::RECONNECT_DISCOVERY:
  1782 | 	{
  1783 | 		uint32 returnAddress = 0;
  1784 | 		uint32 functionStart = 0;
  1785 | 		uint16 port = 0;
  1786 | 		uint32 callsite = 0;
  1787 | 		uint32 target = 0;
  1788 | 		uint8 targetType = 0;
  1789 | 		uint32 connectExport = 0;
  1790 | 		uint32 wsaConnectExport = 0;
  1791 | 		uint32 wrapperCallsite = 0;
  1792 | 		uint32 wrapperTarget = 0;
  1793 | 		uint8 wrapperTargetType = 0;
  1794 | 		uint8 wrapperStatus = 0;
  1795 | 		uint8 asmStatus = 0;
  1796 | 		uint8 asmByteCount = 0;
  1797 | 		pkt >> returnAddress >> functionStart >> port >> callsite >> target >> targetType >> connectExport >> wsaConnectExport >> wrapperCallsite >> wrapperTarget >> wrapperTargetType >> wrapperStatus >> asmStatus >> asmByteCount;
  1798 | 		printf("[RECONNECT_DISCOVERY] connect caller return=0x%08X function candidate=0x%08X port=%u callsite=0x%08X target=0x%08X connect=%s wsaconnect=%s\n",
  1799 | 			returnAddress, functionStart, port, callsite, target,
  1800 | 			targetType == 1 ? "YES" : (targetType == 3 ? "DIRECT" : "NO"),
  1801 | 			targetType == 2 ? "YES" : "NO");
  1802 | 		printf("[RECONNECT_ASM] exports connect=0x%08X wsaconnect=0x%08X target-match=%s\n",
  1803 | 			connectExport, wsaConnectExport,
  1804 | 			target == connectExport ? "connect" : (target == wsaConnectExport ? "wsaconnect" : "none"));
  1805 | 		printf("[RECONNECT_ASM] wrapper-callsite=0x%08X wrapper-target=0x%08X connect=%s wsaconnect=%s\n",
  1806 | 			wrapperCallsite, wrapperTarget,
  1807 | 			wrapperTargetType == 1 ? "YES" : "NO",
  1808 | 			wrapperTargetType == 2 ? "YES" : "NO");
  1809 | 		printf("[RECONNECT_ASM] wrapper-status=%u\n", wrapperStatus);
  1810 | 		printf("[RECONNECT_ASM] status=%u candidate=0x%08X bytes=", asmStatus, functionStart);
  1811 | 		for (uint8 i = 0; i < asmByteCount; ++i)
  1812 | 		{
  1813 | 			uint8 codeByte = 0;
  1814 | 			pkt >> codeByte;
  1815 | 			printf("%02X%s", codeByte, i + 1 == asmByteCount ? "" : " ");
  1816 | 		}
  1817 | 		printf("\n");
  1818 | 		uint8 beforeReturnByteCount = 0;
  1819 | 		pkt >> beforeReturnByteCount;
  1820 | 		printf("[RECONNECT_ASM] before-return bytes=");
  1821 | 		for (uint8 i = 0; i < beforeReturnByteCount; ++i)
  1822 | 		{
  1823 | 			uint8 codeByte = 0;
  1824 | 			pkt >> codeByte;
  1825 | 			printf("%02X%s", codeByte, i + 1 == beforeReturnByteCount ? "" : " ");
  1826 | 		}
  1827 | 		printf("\n");
  1828 | 		uint8 targetByteCount = 0;
  1829 | 		pkt >> targetByteCount;
  1830 | 		printf("[RECONNECT_ASM] target=0x%08X bytes=", target);
  1831 | 		for (uint8 i = 0; i < targetByteCount; ++i)
  1832 | 		{
  1833 | 			uint8 codeByte = 0;
  1834 | 			pkt >> codeByte;
  1835 | 			printf("%02X%s", codeByte, i + 1 == targetByteCount ? "" : " ");
  1836 | 		}
  1837 | 		printf("\n");
  1838 | 	}
  1839 | 	break;
  1840 | 	case XSafeOpCodes::PERKS:
  1841 | 		HandlePerks(pkt);
  1842 | 		break;
  1843 | 	case XSafeOpCodes::CINDIRELLA:
  1844 | 		CindirillaHandler(pkt);
  1845 | 		break;
  1846 | 	case XSafeOpCodes::RIGHT_CLICK_EXCHANGE:
  1847 | 		HandleRightClickExchange(pkt);
  1848 | 		break;
  1849 | 	case XSafeOpCodes::xALIVE:
  1850 | 		XSafe_StayAlive(pkt);
  1851 | 		break;
  1852 | 	case XSafeOpCodes::AUTHINFO:
  1853 | 		XSafe_AuthInfo(pkt);
  1854 | 		break;
  1855 | 	case XSafeOpCodes::PROCINFO:

